package com.by.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.by.config.RedisUtils;
import com.by.bean.ShopCartItem;
import com.by.mapper.ShopCartItemMapper;
import com.by.service.ShopCartService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
public class ShopCartServiceImpl extends ServiceImpl<ShopCartItemMapper, ShopCartItem> implements ShopCartService {


    @Autowired
    private ShopCartItemMapper shopCartItemMapper;
    @Autowired
    private RedisUtils redisUtils;

    private static final long CART_CACHE_TIMEOUT = 60 * 60; // 购物车缓存有效期1小时

    @Override
    @Transactional
    public void addToCart(String userId, List<ShopCartItem> cartItems) {
           try {
            // 存redis
            redisUtils.setCartItems(userId, cartItems, CART_CACHE_TIMEOUT);

            // 存数据库
            cartItems.forEach(item -> shopCartItemMapper.insert(item));
        } catch (Exception e) {
            // 这里可以根据具体情况进行日志记录和异常处理
            throw new RuntimeException("添加购物车失败", e);
        }
    }


    @Override
    public void removeFromCart(String userId) {
        // 创建QueryWrapper对象
        QueryWrapper<ShopCartItem> queryWrapper = new QueryWrapper<>();
        // 设置删除条件，根据user_id字段进行删除
        queryWrapper.eq("user_id", userId);

        // 先删除数据库中的数据
        shopCartItemMapper.delete(queryWrapper);

        // 再删除Redis中对应的购物车数据
        redisUtils.deleteCartItems(userId.toString());

    }

    @Override
    public List<ShopCartItem> getCartItems(String userId) {
        //从redis查
        List<ShopCartItem> cartItems = redisUtils.getCartItems(userId);
        //从数据库查
        if (cartItems == null|| cartItems.isEmpty()) {
            // 创建QueryWrapper对象
            QueryWrapper<ShopCartItem> queryWrapper = new QueryWrapper<>();
            // 设置查询条件，根据user_id字段进行查询
            queryWrapper.eq("user_id", userId);
            // 调用ShopCartItemMapper的selectList方法执行查询
            List<ShopCartItem> shopCartItems = shopCartItemMapper.selectList(queryWrapper);
            //储存到redis
            redisUtils.setCartItems(userId, shopCartItems, CART_CACHE_TIMEOUT);
            return shopCartItems;
        }

        return cartItems;
    }




}




